package collection.stream;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import java.util.Random;

/**
 * 演示常见的终端环节
 */
public class StreamAPIDemo2 {
    public static void main(String[] args) {
        Random random = new Random();
        List<Integer> list = new ArrayList<>();
        for(int i=0;i<3;i++){
            list.add(random.nextInt(100));
        }
        System.out.println(list);
        /*
            常见的终端环节(终止环节)
            min:获取最小值
            max:获取最大值
            anyMatch:判断是否至少匹配一个元素
            allMatch:判断是否匹配所有元素
            noneMatch:判断是否没有匹配任何元素
            reduce:将集合所有元素最终积累为1个值
                   首先将第一个元素和第二个元素进行reduce,得到一个值
                   再将这个值和第三个元素reduce,得到一个值
                   再将这个值和第四个元素reduce,...
         */
//        Optional<Integer> min = list.stream().min((o1, o2)->o1-o2);
//        int d = min.get();//获取Optional中包装的实际元素
//        System.out.println(d);
        //获取集合中的最小值
        int d = list.stream().min((o1, o2)->o1-o2).get();
        System.out.println(d);
        //获取集合中的最大值
        d = list.stream().max((o1, o2)->o1-o2).get();
        System.out.println(d);

        //查看集合中是否有偶数?
        boolean anyMatch = list.stream().anyMatch(e->e%2==0);
        System.out.println("是否有偶数:"+anyMatch);

        //查看集合中是否所有元素都>50
        boolean allMatch = list.stream().allMatch(e->e>50);
        System.out.println("是否所有元素>50:"+allMatch);

        //查看集合中是否所有元素都<=50
        boolean noneMatch = list.stream().noneMatch(e->e>50);
        System.out.println("是否所有元素<=50:"+noneMatch);

        //对集合元素求和
        int sum = list.stream().reduce((e1,e2)->e1+e2).get();
        System.out.println(sum);
    }
}



